网络:HTTP_2 提升网络速度
HTTP/1.1 对带宽的利用率低
TCP 的慢启动
一旦一个 TCP 连接建立之后,就进入了发送数据状态,刚开始 TCP 协议会采用一个非常慢的速度去发送数据,然后慢慢加快发送数据的速度,直到发送数据的速度达到一个理想状态,我们把这个过程称为慢启动。
- 为了减少网络拥塞
- 会带来性能问题
同时开启多条 TCP 连接会竞争固定的带宽
TCP 连接之间不能协商让关键资源优先下载
队头阻塞的问题
HTTP/2 特性
多路复用
一个域名只使用一个 TCP 长连接
- 整个页面资源的下载过程只需要一次慢启动
- 避免了多个 TCP 连接竞争带宽所带来的问题
消除队头阻塞问题
- 实现资源的并行请求
实现原理
- 浏览器准备好请求数据,包括了请求行、请求头等信息,如果是 POST 方法,那么还要有请求体
- 数据经过二进制分帧层处理之后,会被转换为一个个带有请求 ID 编号的帧,通过协议栈将这些帧发送给服务器
- 服务器接收到所有帧之后,会将所有相同 ID 的帧合并为一条完整的请求信息
- 服务器处理该条请求,并将处理的响应行、响应头和响应体分别发送至二进制分帧层
- 二进制分帧层会将这些响应数据转换为一个个带有请求 ID 编号的帧,经过协议栈发送给浏览器
- 浏览器接收到响应帧之后,会根据 ID 编号将帧的数据提交给对应的请求
优先处理关键资源的请求
可以设置请求的优先级
在发送请求时,标上该请求的优先级,这样服务器接收到请求之后,会优先处理优先级高的请求
服务器推送
可以直接将数据提前推送到浏览器:
用户请求一个 HTML 页面之后,服务器知道该 HTML 页面会引用几个重要的 JavaScript 文件和 CSS 文件,那么在接收到 HTML 请求之后,附带将要使用的 CSS 文件和 JavaScript 文件一并发送给浏览器,这样当浏览器解析完 HTML 文件之后,就能直接拿到需要的 CSS 文件和 JavaScript 文件,这对首次打开页面的速度起到了至关重要的作用。
头部压缩
对请求头和响应头进行了压缩